package demoMod.gdxform.interfaces;

import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.utils.Disposable;
import demoMod.gdxform.abstracts.Container;

public interface Element extends Renderable, Disposable, ISubscriber {
    String getId();

    void setId(String id);

    void update();

    Container<? extends Element> getParent();

    void setParent(Container<? extends Element> parent);

    float getX(boolean isAbsolute);

    float getY(boolean isAbsolute);

    void setX(float x);

    void setY(float y);

    float getWidth();

    float getHeight();

    void setWidth(float width);

    void setHeight(float height);

    Color getBackground();

    void setBackground(Color background);

    boolean isResizable();

    void setResizable(boolean resizable);

    boolean enabled();

    void setEnabled(boolean enabled);

    boolean visible();

    void setVisible(boolean visible);

    default void activate() {}

    default void deactivate() {}

    /**
     * 表示此元素是否能被获得焦点<br/>
     * 如果此方法返回false，容器管理器不会主动将其置为焦点元素
     */
    default boolean hasFocus() {
        return false;
    }
}
